%ex2
%Estime por simulac¸ao a probabilidade de pelo menos 1 alvo ter sido atingido 2 ou mais vezes ˜
%quando n = 20 dardos e m = 100 alvos

N = 1e5; %experiencias
n = 20;  %dardos
m = 100; %alvos

alvos = randi(m,n,N);   %Vamos gerar uma matriz com 20 linhas e 10000 colunas
                          %Cada coluna corresponde a uma experiencia
                          %(indicando em qual dos alvos, de 1 a 100,acertou)

sucessos = 0;

for c=1 : N                                                      %Percorrendo alvos coluna a coluna, consideramos que houve
     if length(unique(alvos(:,c)))==n                            %sucesso se o numero de elementos unicos daquela coluna
        sucessos=sucessos+1;                                     %for igual a 20 (todos os alvos sao diferentes                               
     end                                                         %Notar que unique() da nos um array com os elementos nao repetidos de cada coluna de alvos
end                                                                                                                             
   
fprintf("a)")
probA = sucessos/N


disp("(c)")
m1 = 1000;
m2 = 100000;
N = 10000;
y = zeros(1, 10);
z = zeros(1, 10);
n = 10:10:100;

for k=n
    diferentes1 = zeros(1, N);
    diferentes2 = zeros(1, N);
    lancamentos1 = randi(m1, k, N);
    lancamentos2 = randi(m2, k, N);
    for ncol=1 : N
        coluna1 = lancamentos1(:, ncol);
        diferentes1(ncol) = length(unique(coluna1)) == k;
        coluna2 = lancamentos2(:, ncol);
        diferentes2(ncol) = length(unique(coluna2)) == k;
    end
    y(k/10) = (1 - (sum(diferentes1) / N))*100;
    z(k/10) = (1 - (sum(diferentes2) / N))*100;
end

figure()
subplot(2, 1, 1)
plot(n, y)
subplot(2, 1, 2)
plot(n, z)

%--------------------------------------------------------------------------

disp("(d)")
n = 100;
N = 10000;
y = zeros(1, 9);
M = [200, 500, 1000, 2000, 5000, 10000, 20000, 50000, 100000];
figure()

for k=1:length(M)
    diferentes = zeros(1, N);
    lancamentos = randi(M(k), n, N);
    for ncol=1:N
        coluna = lancamentos(:, ncol);
        diferentes(ncol) = length(unique(coluna)) == n;
    end
    y(k) = (1 - (sum(diferentes) / N))*100;
end

stem(M, y)













